﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Crosland.Automotriz.Core;

namespace Crosland.Automotriz.Data.Dao.Linq
{
    public class clsT_Log_RequerimientoDAO
    {
       private AutomotrizEntities ContextoDeObjs = new AutomotrizEntities();

        public IEnumerable<Object> Lista()
        {

            IEnumerable<Object> list = new List<Object>();

            using (ContextoDeObjs)
            {

                try
                {
                    var q = from r in ContextoDeObjs.T_LOG_REQUERIMIETO
                            from t1 in ContextoDeObjs.T_MAE_TABLA_GENERAL_CAB
                            join d1 in ContextoDeObjs.T_MAE_TABLA_GENERAL_DET on r.ID_TIPO_PROCESO equals d1.ID_GENERAL_DET into p1
                            from proceso in p1.DefaultIfEmpty()
                            where t1.NOM_TABLA == "T_LOG_REQUERIMIENTO_TIPO_PROCESO"

                            from t2 in ContextoDeObjs.T_MAE_TABLA_GENERAL_CAB
                            join d2 in ContextoDeObjs.T_MAE_TABLA_GENERAL_DET on r.ID_ESTADO equals d2.ID_GENERAL_DET into p2
                            where t2.NOM_TABLA == "T_LOG_REQUERIMIENTO_TIPO_ESTADO"
                            from estado in p2.DefaultIfEmpty()


                            from t3 in ContextoDeObjs.T_MAE_TABLA_GENERAL_CAB
                            join d3 in ContextoDeObjs.T_MAE_TABLA_GENERAL_DET on r.ID_TIPO_REQUERIMIENTO equals d3.ID_GENERAL_DET into p3
                            where t3.NOM_TABLA == "T_LOG_REQUERIMIENTO_TIPO_REQ"
                            from requerimieto in p3.DefaultIfEmpty()
                            select new
                            {
                                r.ID_LOG_REQUERIMIENTO,
                                PROCESO = proceso.DES_CORTA,

                                r.DESCRIPCION,
                                ESTADO = estado.DES_CORTA,
                                r.FECHA_REGISTRO,
                                r.ID_USUARIO,
                                TIPO_REQUERIMIENTO = requerimieto.DES_CORTA

                            };

                    list = q.ToList();

                }
                catch (Exception ex)
                {

                    throw ex;
                }

            }


            return list;
        }

        public List<T_LOG_REQUERIMIETO> ListaPorNroRequerimiento(int intNroRequerimiento) {

            List<T_LOG_REQUERIMIETO> lista = new List<T_LOG_REQUERIMIETO>();
            try
            {
                var q = from r in ContextoDeObjs.T_LOG_REQUERIMIETO
                        where r.ID_LOG_REQUERIMIENTO == intNroRequerimiento
                        select r;

                lista = q.ToList();
            }
            catch (Exception ex)
            {
                
                throw ex;
            }

            return lista;
        
        }

        public bool Insertar(T_LOG_REQUERIMIETO Obj)
        {
            try
            {
                ContextoDeObjs.AddObject("T_LOG_REQUERIMIETO", Obj);
                ContextoDeObjs.SaveChanges();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return true;
        }

        public bool Modificar(T_LOG_REQUERIMIETO obj)
        {
            try
            {
                ContextoDeObjs.AttachTo("T_LOG_REQUERIMIETO", obj);
                ContextoDeObjs.ObjectStateManager.ChangeObjectState(obj, System.Data.EntityState.Modified);
                ContextoDeObjs.SaveChanges();
            }
            catch (Exception ex)
            {
                throw ex;

            }
            return true;
        }
                
        public IEnumerable<Object> ListaTipos(String strNombreTabla)
        {
            IEnumerable<Object> lista = new List<Object>();
            try
            {
                var q = from c in ContextoDeObjs.T_MAE_TABLA_GENERAL_CAB
                        join d in ContextoDeObjs.T_MAE_TABLA_GENERAL_DET on c.ID_GENERAL_CAB equals d.ID_GENERAL_CAB
                        where c.NOM_TABLA == strNombreTabla
                        select new
                        {
                            Id = d.ID_GENERAL_DET,
                            Descripcion = d.DES_CORTA
                        };


                lista = q.ToList();

            }
            catch (Exception ex)
            {

                throw ex;
            }
            return lista;
        }

        public int UltimoNumero()
        {
            var max = 0;

            try
            {
                max = ContextoDeObjs.T_LOG_REQUERIMIETO.Select(x => x.ID_LOG_REQUERIMIENTO).Max();

            }
            catch (Exception)
            {
                max = 0;

            }

            return max;
        }

        public bool ActualizaEstadoRequerimiento(int intIdEstado,int intIdIdLogRequerimiento) {

            try
            {
                ContextoDeObjs.ExecuteStoreCommand("update T_LOG_REQUERIMIETO set ID_ESTADO={0} where ID_LOG_REQUERIMIENTO={1}", intIdEstado, intIdIdLogRequerimiento);
                return true;
            }
            catch (Exception)
            {
                return false;
                
            }
        
        }
    
    }
}
